package org.aplombh.java.awcing.basic.basics.prefixSumAndDifferencen;

import java.util.Scanner;
import java.util.stream.IntStream;

/**
 * 输入一个长度为 n 的整数序列。
 * <p>
 * 接下来输入 m 个操作，每个操作包含三个整数 l,r,c，表示将序列中 [l,r] 之间的每个数加上 c。
 * <p>
 * 请你输出进行完所有操作后的序列。
 * <p>
 * 输入格式
 * 第一行包含两个整数 n 和 m。
 * <p>
 * 第二行包含 n 个整数，表示整数序列。
 * <p>
 * 接下来 m 行，每行包含三个整数 l，r，c，表示一个操作。
 * <p>
 * 输出格式
 * 共一行，包含 n 个整数，表示最终序列。
 * <p>
 * 数据范围
 * 1≤n,m≤100000,
 * 1≤l≤r≤n,
 * −1000≤c≤1000,
 * −1000≤整数序列中元素的值≤1000
 * 输入样例：
 * 6 3
 * 1 2 2 1 2 1
 * 1 3 1
 * 3 5 1
 * 1 6 1
 * 输出样例：
 * 3 4 5 3 4 2
 */
public class Difference_797 {
    /**
     * Inserts data in a range of array
     *
     * @param b     array name
     * @param left  left margin
     * @param right right margin
     * @param c     data
     */
    public static void insert(int[] b, int left, int right, int c) {
        b[left] += c;
        b[right + 1] -= c;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        int[] a = new int[n + 2];
        int[] b = new int[n + 2];

        IntStream.rangeClosed(1, n).forEach(i -> {
            int x = scanner.nextInt();
            insert(b, i, i, x);
        });

        IntStream.range(0, m).forEach(i -> {
            int left = scanner.nextInt();
            int right = scanner.nextInt();
            int c = scanner.nextInt();
            insert(b, left, right, c);
        });

        IntStream.rangeClosed(1, n).forEach(i -> {
            // Compute the real array
            a[i] = b[i] + a[i - 1];
            System.out.print(a[i] + " ");
        });
    }
}

